package org.scboy.coobi.sql;

import java.util.List;

import org.scboy.utils.annotations.coobi.Execute;
import org.scboy.utils.entitys.coobi.Model;
import org.scboy.utils.entitys.coobi.Page;
import org.scboy.utils.enums.coobi.ExecuteType;

/**
 * 实体表对象操作接口
 */
public interface SqlEntity {
	/**
	 * 新增数据
	 * @param params 参数
	 * @return
	 */
	@Execute(type=ExecuteType.INSERT)
	public int insert(Model params);

	/**
	 * 更新数据
	 * @param params 参数
	 * @return
	 */
	@Execute(type=ExecuteType.UPDATE)
	public int update(Model params);

	/**
	 * 更新数据
	 * @param data 跟新数据
	 * @param params 更新条件
	 * @return
	 */
	@Execute(type=ExecuteType.UPDATE_PARAMS)
	public int update(Model data,Model params);
	
	/**
	 * 删除数据
	 * @param params 参数
	 * @return
	 */
	@Execute(type=ExecuteType.DELETE)
	public int delete(Model params);
	
	/**
	 * 查询数据
	 * @param params 参数
	 * @return
	 */
	@Execute(type=ExecuteType.PAGE)
	public Page page(Model params);
	
	/**
	 * 查询数据
	 * @param params 参数
	 * @return
	 */
	@Execute(type=ExecuteType.SELECT)
	public List<Model> select(Model params);

	/**
	 * 根据条件查询单条数据
	 * @param params 参数
	 * @return
	 */
	@Execute(type=ExecuteType.GET)
	public Model get(Model params);
	
	/**
	 * 查询数据条数
	 * @param params 参数
	 * @return
	 */
	@Execute(type=ExecuteType.COUNT)
	public long count(Model params);
	
	/**
	 * 查询最大值
	 * @param params 参数
	 * @return
	 */
	@Execute(type=ExecuteType.MAX)
	public Model max(String [] entityNames,Model params);
	
	/**
	 * 查询最小值
	 * @param params 参数
	 * @return
	 */
	@Execute(type=ExecuteType.MIN)
	public Model min(String [] entityNames,Model params);
	
	/**
	 * 求和
	 * @param params 参数
	 * @return
	 */
	@Execute(type=ExecuteType.SUM)
	public Model sum(String [] entityNames,Model params);
	
	/**
	 * 平均值
	 * @param params 参数
	 * @return
	 */
	@Execute(type=ExecuteType.AVG)
	public Model avg(String [] entityNames,Model params);

}
